package com;

import org.apache.log4j.Logger;

import feng.process.Launcher;
import feng.process.ProcessDataInfo;
import feng.process.api.ProcessManager;
import feng.process.api.TaskManager;
import feng.process.api.bean.ParamProcessCreateBean;
import feng.process.api.bean.ParamTaskDealBean;

public class ProcessMain {
    
    private static final Logger log = Logger.getLogger(ProcessMain.class);
    
    /**
     * 功能：测试程序入口
     * @param args
     * @create 2012-10-22 下午8:33:58
     */
    public static void main(String[] args) {
        
        Launcher processLauncher = new Launcher();
        boolean startRs = processLauncher.start();
        if(!startRs) {
            log.error("[流程引擎启动失败]");
            return;
        }
        
        log.debug("流程配置加载结果：" + ProcessDataInfo.processMap);
        
//        // 发起工单
//        try {
//            /*
//             * 发起工单需要设定以下参数：
//             * 1)流程模板名(setTempleteName)：必须
//             * 2)工单标题(setTitle):必须
//             * 3)工单发起人(setStartUserId):必须
//             * 4)工单编号(setFlowNumber):必须
//             * 
//             * 5)下一环节待办人(setNextStepWaitUsers):可选，
//             *   如果发起工单后的下一环节在流程模板中的user-select-role属性配置为"dynamically_specify",
//             *   则需要指定下一环节待办人。否则不用设置该参数.
//             */
//            ProcessManager processMgr = new ProcessManager();
//            ParamProcessCreateBean pcreateBean = new ParamProcessCreateBean();
//            pcreateBean.setTempleteName("testProcess");
//            pcreateBean.setTitle("测试流程20121106_01");
//            pcreateBean.setStartUserId(1005);
//            pcreateBean.setFlowNumber("CY-002-0601");
//            
//            // 如果发起工单后的下一个环节待办人为动态指定，则需要在发起的时候给出下一环节人员
//            //pcreateBean.setNextStepWaitUsers("5012,5013,5014");
//            
//            long flow_id = processMgr.startNewProcess(pcreateBean);
//            log.debug("流程发起结果 flow_id=" + flow_id);
//        } catch (Exception e) {
//            log.error("[流程发起异常] :" + e.toString());
//            e.printStackTrace();
//        }
        
//        // 处理环节
//        try {
//            
//            /*
//             * 环节处理需要设置的参数：
//             * 1) 环节处理人(setDealUserId) : 必须
//             * 2) 工单流水号(setFlowId) : 必须
//             * 3) 环节标识(setStepId) : 必须
//             * 4) 流程模板(setTempleteName) : 必须
//             * 5) 环节ID(setTaskId) : 必须
//             * 
//             * 6)下一环节待办人(setNextStepWaitUsers):可选，
//             *   如果发起工单后的下一环节在流程模板中的user-select-role属性配置为"dynamically_specify",
//             *   则需要指定下一环节待办人。否则不用设置该参数.
//             */
//            TaskManager taskMgr = new TaskManager();
//            ParamTaskDealBean ptaskDealBean = new ParamTaskDealBean();
//            ptaskDealBean.setDealUserId("1001");
//            ptaskDealBean.setFlowId(4);
//            ptaskDealBean.setStepId("bprk");
//            ptaskDealBean.setTempleteName("testProcess");
//            ptaskDealBean.setTaskId(6);
//            
//            // 如果下一环节人员为动态指定，需要从这里传入下一环节人员ID，多个人员用逗号分隔
//            ptaskDealBean.setNextStepWaitUsers("3012,3013,3014");
//            boolean finishrs = taskMgr.finishCurrentTask(ptaskDealBean);
//            log.debug("环节处理结果 finishrs=" + finishrs);
//            
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        
        // 处理最后环节
        try {
            TaskManager taskMgr = new TaskManager();
            ParamTaskDealBean ptaskDealBean = new ParamTaskDealBean();
            ptaskDealBean.setDealUserId("2002");
            ptaskDealBean.setFlowId(4);
            ptaskDealBean.setStepId("bpjgck");
            ptaskDealBean.setTempleteName("testProcess");
            ptaskDealBean.setTaskId(7);
            boolean finishrs = taskMgr.finishCurrentTask(ptaskDealBean);
            log.debug("环节处理结果 finishrs=" + finishrs);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
//        // 删除流程实例
//        try {
//            
//            ProcessManager processMgr = new ProcessManager();
//            long flowId = 1;
//            boolean delProcess = processMgr.deleteProcess(flowId);
//            log.debug("流程实例["+ flowId +"]删除处理结果 delProcess=" + delProcess);
//            
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

}
